#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");

#define MODULENAME "parameter"

#define LOG_INFO(fmt, ...)               \
    printk(KERN_INFO MODULENAME ": ["    \
                                "]" fmt, \
           ##__VA_ARGS__)

#define LOG_ERR(fmt, ...)               \
    printk(KERN_ERR MODULENAME ": ["    \
                               "]" fmt, \
           ##__VA_ARGS__)

static int a = 0;
static int b[5];// could not insert module parameter/parameter.ko: Invalid parameters 如果传入的参数超过五个会报错
static int count; // 记录用户在安装驱动时传入给b的参数的个数
module_param(a, int, S_IRUSR);
module_param_array(b, int, &count, S_IRUSR);

static int __init misc_init(void)
{
    LOG_INFO("--------------------------\n");
    LOG_INFO("Hello, world\n");
    LOG_INFO("a = %d\n", a);
    LOG_INFO("**********************************");

    LOG_INFO("count = %d\n", count);
    size_t i;
    for (i = 0; i < count; i++)
    {
        LOG_INFO("b[%d] = %d\n", i, b[i]);
    }

    return 0;
}

static void misc_exit(void)
{
    LOG_INFO("Goodbye, world\n");
    LOG_INFO("a = %d\n", a);
    LOG_INFO("--------------------------\n");
}

module_init(misc_init);
module_exit(misc_exit);
